<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>1_高阶函数_函数柯里化</title>
  </head>
  <body>
    <!-- 准备好一个容器 -->
    <div id="root"></div>

    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom 用于支持react操作dom -->
    <script
      type="text/javascript"
      src="../js/react-dom.development.js"
    ></script>
    <!-- 引入babel 将js转换成jsx -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <!-- type="text/babel" 表示写的是 jsx 使用babel 翻译 -->
    <script type="text/babel">
      // 1. 创建组件
      class Login extends React.Component {
        //#region
        /*
            高阶函数：如果一个函数符合下面2个规范中的任何一个，那该函数就是高阶函数。
                1,若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
                2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                常见的高阶函数有：Promise、setTimeout、arr,map()等等
            函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式。
            米
        */
        //#endregion

        // 初始化状态
        state = {
          username: "",
          password: "",
        };
        // 保存用户名
        changeUserName = (e) => {
          this.setState({ username: e.target.value });
        };
        // 保存密码
        changePassword = (e) => {
          this.setState({ password: e.target.value });
        };
        // 保存表单数据
        saveFromData = (dataType) => {
          return (event) => {
            this.setState({ [dataType]: event.target.value });
          };
        };

        // 表单提交
        handleSubmit = (e) => {
          e.preventDefault();
          const { username, password } = this.state;
          alert(`用户名是${username},密码是${password}`);
        };
        render() {
          return (
            <div>
              <form onSubmit={this.handleSubmit}>
                <span>账号:</span>
                <input
                  type="text"
                  onChange={this.saveFromData("username")}
                  placeholder="请输入账号"
                  name="username"
                />
                <span>密码:</span>
                <input
                  type="text"
                  onChange={this.saveFromData("password")}
                  placeholder="请输入密码"
                  name="password"
                />
                <button>提交</button>
              </form>
            </div>
          );
        }
      }
      ReactDOM.render(<Login />, document.getElementById("root"));
    </script>
  </body>
</html>
